#include "gkt_board.h"
#include "gkt_debug.h"
#include "gkt_gpio.h"
#include "door_common.h"

#if defined(GKT_CONFIG_DOOR_LOCK_ENABLE) && GKT_CONFIG_DOOR_LOCK_ENABLE \
	&& (GKT_DOOR_LOCK_LOCATION == GKT_MODULE_LOC_FRONTBOARD)	\
	&& (!defined(GKT_CONFIG_DOOR_LOCK_AUTOMATIC) || !GKT_CONFIG_DOOR_LOCK_AUTOMATIC) \
	&& (DOOR_LOCK_MOTOR_DRVIC == DOOR_LOCK_MOTOR_DRVIC_ST18837)

#if !defined(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN) \
	|| !defined(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN)
#error "not define MOTOR_IN_GPIO_PIN"
#endif

int door_lock_motor_rotate_forward(void)
{
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 1);
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 0);

	return GKT_SUCCESS;
}

int door_lock_motor_rotate_reverse(void)
{
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 0);
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 1);

	return GKT_SUCCESS;
}
void door_lock_motor_rotate_brake(void)
{
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 1);
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 1);
}
void door_lock_motor_rotate_stop(void)
{
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 1);
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 1);
}

void door_lock_motor_reset(void)
{
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 1);
	gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 1);
}

int door_lock_motor_init(void)
{
	int retval;

	retval = gkt_gpio_config(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 
					GKT_GPIO_F_OUTPUT, NULL);
	if (retval != GKT_SUCCESS) {
		gkt_error("door_lock_motor: init MOTOR_IN1_GPIO_PIN failed %d\n", retval);
		return retval;
	}

	retval = gkt_gpio_config(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 
					GKT_GPIO_F_OUTPUT, NULL);
	if (retval != GKT_SUCCESS) {
		gkt_error("door_lock_motor: init MOTOR_IN2_GPIO_PIN failed %d\n", retval);
		return retval;
	}

	door_lock_motor_rotate_stop();

	return GKT_SUCCESS;
}

int door_lock_motor_standby(void)
{
	int retval=GKT_SUCCESS;
	retval = gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN1_GPIO_PIN, 0);
	if (retval != GKT_SUCCESS) {	
		gkt_error("door_lock_motor_standby:Motor in1 pin set 0 %d\n", retval);
		return retval;
	}
	retval = gkt_gpio_set_pin_level(GKT_CONFIG_DOOR_LOCK_MOTOR_IN2_GPIO_PIN, 0);
	if (retval != GKT_SUCCESS) {	
		gkt_error("door_lock_motor_standby:Motor in2 pin set 0 %d\n", retval);
		return retval;
	}
	return retval;
}
#endif

